package com.cskaoyan.javase.basic._2variable._5cast;

/**
 * 整数常量的特殊性
 * 表达式的类型提升,对于整型运算而言,需要至少存在一个变量,才遵循表达式的类型提升
 * 但如果运算,都是常量,就不遵守了.
 *
 * 编译器实际上是很"聪明"的:
 *      1.对于整数字面值常量（包括常量的运算）而言，因为它的值一定不会发生变化
 *      而且整型数据值的位数十分容易判断，所以编译器能够自动判断整型常量是否在接收数据类型的范围内。
 *      2.体现在语法上就是：将一个整型字面值（包括常量的运算）赋值给整型时，如果该常量在整型数据类型的取值范围内，是可以赋值成功的。但如果不在取值范围内,就不能赋值成功!
 *
 * @since 17:37
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo3 {
    public static void main(String[] args) {
        // 100默认当做int处理
        int a = 100;

        byte b = 100;
        // byte b1 = 200;

        short c = 100;
        // short c1 = 50000;
        char d = 100;
        // char d1 = -100;

        /*
            注意以上都是指整型常量,但是变量不存在以上特点
            而是遵循表达式的类型提升!!!1
          */
        int result = b + 20;

        // 等价于 byte b2 = 3;
        byte b2 = 1 + 2;
    }
}
